package controladores;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import modelo.Categoria;
import modelo.Direccion;
import modelo.Persona;
import modelo.PersonaContacto;
import modelo.Usuario;
import negocio.CategoriaBI;
import negocio.PersonaBI;
import negocio.UsuarioBI;
import pojos.DireccionVO;
import pojos.PersonaVO;

@ManagedBean(name="crearPerCtrl")
@ViewScoped
public class CrearPersonaCtrl implements Serializable {
    private static final long serialVersionUID=1L;
    
    @Inject
    private PersonaVO personaVO;
    @Inject
    private PersonaBI personaBI;
    @Inject
    private CategoriaBI categoriaBI;
    @Inject
    private UsuarioBI usuarioBI;
    private LoginCtrl login;
    private Usuario usuario;

    public PersonaVO getPersonaVO() {
        return personaVO;
    }

    public void setPersonaVO(PersonaVO personaVO) {
        this.personaVO = personaVO;
    }

    public PersonaBI getPersonaBI() {
        return personaBI;
    }

    public void setPersonaBI(PersonaBI personaBI) {
        this.personaBI = personaBI;
    }

    public CategoriaBI getCategoriaBI() {
        return categoriaBI;
    }

    public void setCategoriaBI(CategoriaBI categoriaBI) {
        this.categoriaBI = categoriaBI;
    }

    public UsuarioBI getUsuarioBI() {
        return usuarioBI;
    }

    public void setUsuarioBI(UsuarioBI usuarioBI) {
        this.usuarioBI = usuarioBI;
    }
    
    
    public LoginCtrl getLogin() {
        return login;
    }

    public void setLogin(LoginCtrl login) {
        this.login = login;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }
    
    public void guardar() throws Exception{
        login = (LoginCtrl)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("login");
        String nombreUsuario = login.getUsuario();
        usuario = usuarioBI.buscarUsuario(nombreUsuario);
        try{
            Persona persona = new Persona();
            persona.setNombre(personaVO.getNombre());
            persona.setApellidoPaterno(personaVO.getApellidoPat());
            persona.setApellidoMaterno(personaVO.getApellidoMat());
            persona.setSexo(personaVO.getSexo());
            persona.setFechaNacimiento(personaVO.getFechaNac());
            persona.setDescripcion(personaVO.getDescripcion());
            persona.setIdUsuario(usuario);
            List<PersonaContacto> personaContactos = new ArrayList<PersonaContacto>();
            if(personaVO.getCorreo() != null && !personaVO.getCorreo().equals("")){
                PersonaContacto personaCorreo = new PersonaContacto();
                personaCorreo.setContacto(personaVO.getCorreo());
                personaCorreo.setTipo("CORREO");
                personaContactos.add(personaCorreo);
            }
            if(personaVO.getTelefono() != null && !personaVO.getTelefono().equals("")){
                PersonaContacto personaTelefono = new PersonaContacto();
                personaTelefono.setContacto(personaVO.getTelefono());
                personaTelefono.setTipo("TELEFONO");
                personaContactos.add(personaTelefono);
            }
            persona.setEstatus("A"); 
           List<String> idCategoriaUsu = personaVO.getCategoria();
            if(idCategoriaUsu != null && idCategoriaUsu.size()>0) {
                ArrayList<Categoria> categorias = new ArrayList<Categoria>();
                for(String idCategoria : idCategoriaUsu)
                {
                   categorias.add(categoriaBI.buscarCategoria(Integer.valueOf(idCategoria))); 
                }
                persona.setCategoriaList(categorias);
            }
            DireccionVO direccionVO = personaVO.getDireccion();
            Direccion direccion = new Direccion();
            direccion.setCalle(direccionVO.getCalle());
            direccion.setNumeroExterior(direccionVO.getNumeroExterior());
            direccion.setNumeroInterior(direccionVO.getNumeroInterior());
            direccion.setColonia(direccionVO.getColonia());
            direccion.setRegion(direccionVO.getRegion());
            direccion.setCodigoPostal(direccionVO.getCodigoPostal());
            direccion.setEstado(direccionVO.getEstado());
            direccion.setPais(direccionVO.getPais());
            personaBI.crear(persona, direccion, personaContactos);
            FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_INFO, "Listo", "Guardado con éxito"));
        }catch(Exception e){
            e.printStackTrace();
            FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, "No se pudo crear la persona", e.getMessage()));
        }
    }
    
    public void cancelar(){
        personaVO = new PersonaVO();
        /*personaVO.setNombre(null);
        personaVO.setApellidoPat(null);
        personaVO.setApellidoMat(null);
        personaVO.setFechaNac(null);
        personaVO.setDescripcion(null);
        personaVO.setTelefono(null);
        personaVO.setCorreo(null);
        direccionVO.setCalle(null);
        direccionVO.setNumeroExterior(null);
        direccionVO.setNumeroInterior(null);
        direccionVO.setColonia(null);
        direccionVO.setRegion(null);
        direccionVO.setCodigoPostal(null);
        direccionVO.setEstado(null);
        direccionVO.setPais(null);*/
    }
    
}
